home *** CD-ROM | disk | FTP | other *** search
- /*
- Dieses Programm versucht MultiTeX/CS-TeX ab 3.14 so zu patchen,
- da der Cork-Tabellen-Hack wirkungslos wird. Damit funktioniert
- das umlaut-package dann einwandfrei.
- VOR DER ANWENDUNG VORSICHTSHALBER EIN BACKUP DES TEX*.TTP ANLEGEN!!!
- VERWENDUNG DES PROGRAMMS AUF EIGENE GEFAHR!!!!
- Mehrfaches Patchen spielt keine Rolle.
- (c) Markus Kohm @ KA2, 1994
- */
-
- #include <stdio.h>
-
- int main( int argc, const char *argv[] ) {
- FILE *tex;
- char puffer[128];
- short magic;
- long ph_tlen;
- long ph_dlen;
- long l;
- int i;
- puts( "@(#)CS-TeX-Patch (c) Markus Kohm, Nov 21 1994\n" + 4 );
- if ( argc != 2 ) {
- fputs( "Usage: texpatch <texpath+name>\n", stderr );
- return 1;
- }
- puts( "Open tex: " );
- puts( argv[1] );
- if ( ( tex = fopen( argv[1], "rb+" ) ) == NULL ) {
- perror( "fopen" );
- return 2;
- }
- if ( ( fread( &magic, 2, 1, tex ) != 1 ) ||
- ( fread( &ph_tlen, 4, 1, tex ) != 1 ) ||
- ( fread( &ph_dlen, 4, 1, tex ) != 1 ) ) {
- perror( "fread" );
- fclose( tex );
- return 2;
- }
- if ( fseek( tex, ph_tlen+0x1C, SEEK_SET ) ) {
- perror( "fseek" );
- fclose( tex );
- return 2;
- }
- puts( "Search Cork-table." );
- if ( fread( puffer, 127, 1, tex ) != 1 ) {
- perror( "fread" );
- fclose( tex );
- return 3;
- }
- l = ph_tlen + 0x1C;
- while ( ph_dlen >= 256 ) {
- if ( fread( puffer+127, 1, 1, tex ) != 1 ) {
- perror( "fread" );
- fclose( tex );
- return 3;
- }
- for ( i = 0; (i < 128) && (puffer[i] == i); i++ );
- if ( i == 128 ) {
- puts( "Cork-table found." );
- for ( i = 0; i < 128; i++ )
- puffer[i] = i+128;
- l += 128;
- if ( fseek( tex, l, SEEK_SET ) ) {
- perror( "fseek" );
- fclose( tex );
- return 3;
- }
- if ( fwrite( puffer, 128, 1, tex ) != 1 ) {
- perror( "fwrite" );
- fclose( tex );
- return 4;
- }
- if ( fclose( tex ) ) {
- perror( "fclose" );
- return 4;
- }
- puts( "Cork-table deleted!" );
- return 0;
- }
- ph_dlen--;
- l++;
- for ( i = 0; i < 127; i++ )
- puffer[i] = puffer[i+1];
- }
- fputs( "Cannot find Cork-table!\n", stderr );
- return 3;
- }
-